package com.hnzq.cloud.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hnzq.cloud.entity.FreFlag;
import com.hnzq.cloud.entity.FreGoods;
import com.hnzq.cloud.entity.FreGoodsFlag;
import com.hnzq.cloud.exception.FreFlagException;
import com.hnzq.cloud.exception.FreGoodsException;
import com.hnzq.cloud.mapper.FreGoodsFlagMapper;
import com.hnzq.cloud.param.AddFreGoodsFlagParam;
import com.hnzq.cloud.param.DeleteFreGoodsFlagsParam;
import com.hnzq.cloud.param.UpdateFreGoodsFlagsParam;
import com.hnzq.cloud.service.FreFlagService;
import com.hnzq.cloud.service.FreGoodsFlagService;
import com.hnzq.cloud.service.FreGoodsService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author jams
 * @since 2022-02-06
 */
@Service
public class FreGoodsFlagServiceImpl extends ServiceImpl<FreGoodsFlagMapper, FreGoodsFlag> implements FreGoodsFlagService {

    @Resource
    private FreGoodsService freGoodsService;
    @Resource
    private FreFlagService freFlagService;

    @Override
    public Boolean addFreGoodsFlag(AddFreGoodsFlagParam addFreGoodsFlagParam) {
        FreFlag freFlag = freFlagService.getById(addFreGoodsFlagParam.getFlagId());
        if (freFlag==null) throw new FreFlagException("该标签不存在",544);
        if (addFreGoodsFlagParam.getGoodsIds()==null) throw new FreGoodsException("商品集不存在",144);
        List<FreGoods> freGoodsList = freGoodsService.listByIds(addFreGoodsFlagParam.getGoodsIds());
        if (freGoodsList.size()!=addFreGoodsFlagParam.getGoodsIds().size()) throw new FreGoodsException("有不存在的商品",144);
        List<FreGoodsFlag> freGoodsFlagArrayList = new ArrayList<>();
        List<Integer> goodsIds = addFreGoodsFlagParam.getGoodsIds();
        for (Integer goodsId : goodsIds) {
            FreGoodsFlag freGoodsFlag = new FreGoodsFlag();
            freGoodsFlag.setFlagId(addFreGoodsFlagParam.getFlagId());
            freGoodsFlag.setGoodsId(goodsId);
            freGoodsFlagArrayList.add(freGoodsFlag);
        }
        return saveBatch(freGoodsFlagArrayList);
    }

    @Override
    public Boolean deleteFreGoodsFlags(DeleteFreGoodsFlagsParam deleteFreGoodsFlagsParam){
        FreFlag flag = freFlagService.getById(deleteFreGoodsFlagsParam.getFlagId());
        if (flag==null) throw new FreFlagException("所对应的标签不存在，请重新选择",544);
        List<FreGoods> freGoods = freGoodsService.listByIds(deleteFreGoodsFlagsParam.getGoodsIds());
        if (freGoods.size()!=deleteFreGoodsFlagsParam.getGoodsIds().size()){
            throw new FreGoodsException("所选择的商品有不存在的",114);
        }
        QueryWrapper<FreGoodsFlag> wrapper = new QueryWrapper<>();
        wrapper.eq("flag_id",deleteFreGoodsFlagsParam.getFlagId())
                .in("goods_id",deleteFreGoodsFlagsParam.getGoodsIds());
        Integer count = baseMapper.selectCount(wrapper);
        if (count!=deleteFreGoodsFlagsParam.getGoodsIds().size()){
            throw new FreFlagException("该标签中有无关商品,请重新选择",545);
        }
        return remove(wrapper);
    }

    @Override
    public Boolean updateFreGoodsFlags(UpdateFreGoodsFlagsParam updateFreGoodsFlagsParam) {
        FreFlag flag = freFlagService.getById(updateFreGoodsFlagsParam.getFlagId());
        if (flag==null) throw new FreFlagException("所对应的标签不存在，请重新选择",544);
        List<FreGoods> freGoods = freGoodsService.listByIds(updateFreGoodsFlagsParam.getGoodsIds());
        if (freGoods.size()!=updateFreGoodsFlagsParam.getGoodsIds().size()){
            throw new FreGoodsException("所选择的商品有不存在的",114);
        }
        QueryWrapper<FreGoodsFlag> wrapper = new QueryWrapper<>();
        wrapper.eq("flag_id",updateFreGoodsFlagsParam.getFlagId());
        remove(wrapper);
        List<FreGoodsFlag> freGoodsFlagList = new ArrayList<>();
        List<Integer> goodsIds = updateFreGoodsFlagsParam.getGoodsIds();
        for (Integer goodsId : goodsIds) {
            FreGoodsFlag freGoodsFlag = new FreGoodsFlag();
            freGoodsFlag.setFlagId(updateFreGoodsFlagsParam.getFlagId());
            freGoodsFlag.setGoodsId(goodsId);
            freGoodsFlagList.add(freGoodsFlag);
        }
        return saveBatch(freGoodsFlagList);
    }
}
